Make std::get constexpr git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@186525 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/array b/include/array index bcf5347..86d1fc0 100644 --- a/include/array +++ b/include/array 
@@ -59,14 +59,14 @@    // element access:  reference operator[](size_type n); - const_reference operator[](size_type n) const; - const_reference at(size_type n) const; + const_reference operator[](size_type n) const; // constexpr in C++14 + const_reference at(size_type n) const; // constexpr in C++14  reference at(size_type n);    reference front(); - const_reference front() const; + const_reference front() const; // constexpr in C++14  reference back(); - const_reference back() const; + const_reference back() const; // constexpr in C++14    T* data() noexcept;  const T* data() const noexcept; @@ -92,9 +92,9 @@  template <int I, class T> class tuple_element;  template <class T, size_t N> struct tuple_size<array<T, N>>;  template <int I, class T, size_t N> struct tuple_element<I, array<T, N>>; -template <int I, class T, size_t N> T& get(array<T, N>&) noexcept; -template <int I, class T, size_t N> const T& get(const array<T, N>&) noexcept; -template <int I, class T, size_t N> T&& get(array<T, N>&&) noexcept; +template <int I, class T, size_t N> T& get(array<T, N>&) noexcept; // constexpr in C++14 +template <int I, class T, size_t N> const T& get(const array<T, N>&) noexcept; // constexpr in C++14 +template <int I, class T, size_t N> T&& get(array<T, N>&&) noexcept; // constexpr in C++14    } // std   @@ -181,14 +181,14 @@    // element access:  _LIBCPP_INLINE_VISIBILITY reference operator[](size_type __n) {return __elems_[__n];} - _LIBCPP_INLINE_VISIBILITY const_reference operator[](size_type __n) const {return __elems_[__n];} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference operator[](size_type __n) const {return __elems_[__n];}  reference at(size_type __n); - const_reference at(size_type __n) const; + _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference at(size_type __n) const;    _LIBCPP_INLINE_VISIBILITY reference front() {return __elems_[0];} - _LIBCPP_INLINE_VISIBILITY const_reference front() const {return __elems_[0];} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference front() const {return __elems_[0];}  _LIBCPP_INLINE_VISIBILITY reference back() {return __elems_[_Size > 0 ? _Size-1 : 0];} - _LIBCPP_INLINE_VISIBILITY const_reference back() const {return __elems_[_Size > 0 ? _Size-1 : 0];} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference back() const {return __elems_[_Size > 0 ? _Size-1 : 0];}    _LIBCPP_INLINE_VISIBILITY  value_type* data() _NOEXCEPT {return __elems_;} @@ -210,6 +210,7 @@  }    template <class _Tp, size_t _Size> +_LIBCPP_CONSTEXPR_AFTER_CXX11  typename array<_Tp, _Size>::const_reference  array<_Tp, _Size>::at(size_type __n) const  { @@ -306,32 +307,32 @@  };    template <size_t _Ip, class _Tp, size_t _Size> -_LIBCPP_INLINE_VISIBILITY inline +_LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR_AFTER_CXX11  _Tp&  get(array<_Tp, _Size>& __a) _NOEXCEPT  {  static_assert(_Ip < _Size, "Index out of bounds in std::get<> (std::array)"); - return __a[_Ip]; + return __a.__elems_[_Ip];  }    template <size_t _Ip, class _Tp, size_t _Size> -_LIBCPP_INLINE_VISIBILITY inline +_LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR_AFTER_CXX11  const _Tp&  get(const array<_Tp, _Size>& __a) _NOEXCEPT  {  static_assert(_Ip < _Size, "Index out of bounds in std::get<> (const std::array)"); - return __a[_Ip]; + return __a.__elems_[_Ip];  }    #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES    template <size_t _Ip, class _Tp, size_t _Size> -_LIBCPP_INLINE_VISIBILITY inline +_LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR_AFTER_CXX11  _Tp&&  get(array<_Tp, _Size>&& __a) _NOEXCEPT  {  static_assert(_Ip < _Size, "Index out of bounds in std::get<> (std::array &&)"); - return _VSTD::move(__a[_Ip]); + return _VSTD::move(__a.__elems_[_Ip]);  }    #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES